package com.weigj.service;

import java.util.Date;
import java.util.List;

import com.weigj.model.CarInfo;
import com.weigj.model.Content;
import com.weigj.model.Dept;
import com.weigj.model.Employee;
import com.weigj.model.OtherMoneyInfo;
import com.weigj.model.ReserveHour;

public interface DeptAppService {
	/**
	 * 能否登录成功
	 * @param loginName 登录用户名
	 * @param password 密码
	 * @return 
	 */
	public Employee loginSuccess(String loginName,String password);
	/**根据 用户登录的id查询该用户下有几个可登录场站
	 * @param userId 登录用户id
	 * @return jsonString
	 */
	public String queryUserDeptFunc(String userId);
	/**根据用户选择的dept站点属性列出详细站点
	 * @param deptFuncId id
	 * @return jsonString
	 */
	public List<Dept> queryUserDepts(String deptFunc,String empId);
	/**  根据场站id查询预定单 未发车
	 * @param deptId  场站id
	 * @return list-预定单
	 */
	//TODO 替换Object ==> 预定单
	public List<ReserveHour> queryOrderList(String deptId);
	/**根据预定单id查询具体订单
	 * @param orderId 预定单id
	 * @return 预定单
	 */
	//TODO 替换Object ==> 预定单
	public ReserveHour queryOneOrderById(String orderId);
	/**根据预定单号查询预定单
	 * @param orderNum 预定单号
	 * @return 预定单
	 */
	//TODO 替换Object ==> 预定单
	public List<ReserveHour> queryOrderByNum(String orderNum,String localId);
	/**
	 * @param carMakeCode 扫描的车架号
	 * @param num 预定单编号
	 * @return Content
	 */
	public Content checkReserveHourContractCarCanRent(String carMakeCode,String num);
	/**根据车牌号或者车架号查询车辆信息  param.length>10 是车架号 如果小于等于10则调用查询车牌号
	 * @param param
	 * @return 车辆信息
	 */
	public CarInfo queryCarInfo(String param);
	/** 发车操作 包含预定单转订单
	 * @param date 发车时间 租赁开始时间
	 * @param initKM 初始公里数
	 * @param orderId 预定单ID
	 * @param carInfoLicense 车辆车牌号或车架号 可以为null
	 * @return boolean
	 */
	public boolean sendCar(String initKM,String orderId,String carInfoLicense,String inputer);
	/**查询某一场站下所有待租车辆
	 * @param deptId 场站id
	 * @return car list
	 */
	public List<CarInfo> queryCarListCanRent(String deptId);
	//还车
	/** 根据车辆车牌号或车架号查询当前订单 
	 * @param carInfoLicense 车牌号或车架号
	 * @return
	 */
	//TODO 替换objcet ==>订单实体类
	public Object queryContractByCarLicense(String carInfoLicense);
	/**   还车  
	 * @param hourContractId 合同id
	 * @param backDate  还车时间  
	 * @param endKM 还车公里数
	 * @param deptId localId
	 * @return 是否成功
	 */
	public boolean backCarSuccess(String backCarFlag,String hourContractId, String backDate, String endKM,String deptId,String empName);
	/**根据合同id结算 。 计算系列合同金额
	 * @param hourContractId
	 * @return
	 */
	//TODO 替换object  ==>结算单实体类
	public Object js(String hourContractId);
	/**保存结算信息 
	 * @param 
	 * @param omiList 其他费用信息
	 * @return 
	 */
	public boolean saveJsSuccess(List<OtherMoneyInfo> omiList);
	
	/**
	 * @param payway 付款方式  
	 * @param sum 总付多少元
	 * @return
	 */
	public boolean pay(String payway,String sum);
	/**查询已经还车但是未保存或未结算的订单
	 * @param deptId 部门id 
	 * @return contract list 
	 */
	public List<Object> queryHasBackCarButNotJSContract(String deptId);
	//换车
	/** 查询列表   已还车未换车订单
	 * @param deptid
	 * @return  list 
	 */
	//TODO 替换object  ==>分时合同实体类
	public List<Object> queryHasBackCarButNotChangeContract(String deptid);
	/**
	 * @param param
	 * @return
	 */
	public boolean queryCarForChange(String param);
	/**换车发车
	 * @param contractId 原合同ID
	 * @param carInfoLicense 车牌号或车架号
	 * @param initKM 发车里程
	 * @param deptId 发车地点id
	 * @return
	 */
	public boolean changeCarSuccess(String contractId,String carInfoLicense,String initKM,String deptId,String startTime,String empName);
	
	/**收款  修改最后一张结算单
	 * @param contractId 合同id 通过id查找结算单
	 * @param oper 操作符 增加 减免
	 * @param reason 理由--放到备注里
	 * @param money 减免或增加 金额
	 * @param shouldInput 最后应收款
	 * @param paymethod 付款方式
	 * @return 结算成功或失败
	 */
	public boolean successInput(String contractId, String oper, String reason, String money, String shouldInput, String paymethod);
	/**检查车辆是否可以执行换车发车
	 * @param para 车牌号或车架号
	 * @return
	 */
	public Content checkCanChangeCar(String para);
}
